package com.sh.serializer;


import com.caucho.hessian.io.HessianInput;
import com.caucho.hessian.io.HessianOutput;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

/**
 * Hessian 序列化器
 */
public class HessianSerializer implements Serializer {

    // 序列化  对象-> 字节数组
    @Override
    public <T> byte[] serialize(T obj) throws Exception {
        // 创建一个字节数组输出流
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        // 创建一个Hessian输出对象，用于将对象序列化到字节数组输出流中
        HessianOutput ho = new HessianOutput(bos);
        // 将对象序列化到字节数组输出流中
        ho.writeObject(obj);
        // 将字节数组输出流中的字节数组转换为byte数组返回
        return bos.toByteArray();
    }


    // 反序列化  字节数组-> 对象
    @Override
    public <T> T deserialize(byte[] bytes, Class<T> clazz) throws Exception {
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
        HessianInput hi = new HessianInput(byteArrayInputStream);
        return (T) hi.readObject();
    }
}
